package LimitedTimeGame.Day_0216;

/**
 * @author zxc
 * @date 2023/02/16 08:34
 **/

import java.util.HashMap;
import java.util.HashSet;

/**
 * 题目 ：数组能够形成的数对数量
 * 题目详述 ：
 * 给你一个下标从 0 开始的整数数组 nums 。在一步操作中，你可以执行以下步骤：
 * 从 nums 选出 两个 相等的 整数
 * 从 nums 中移除这两个整数，形成一个 数对
 * 请你在 nums 上多次执行此操作直到无法继续执行。
 * 返回一个下标从 0 开始、长度为 2 的整数数组 answer 作为答案，
 * 其中 answer[0] 是形成的数对数目，answer[1] 是对 nums 尽可能执行上述操作后剩下的整数数目。
 *
 * 提示：
 * 1 <= nums.length <= 100
 * 0 <= nums[i] <= 100
 *
 */
public class NumberOfPairs {
    /**
     * 思路 ：
     * 1.使用哈希表，来统计nums数组中所有元素的出现次数;同时，使用Set集合，来统计nums数组中不重复元素
     * @param nums
     * @return
     */
    public int[] numberOfPairs(int[] nums) {
        HashMap<Integer , Integer> hashMap = new HashMap<>();
        HashSet<Integer> hashSet = new HashSet<>();
        int[] result = new int[2];
        for (int num : nums) {
            hashMap.put(num , hashMap.getOrDefault(num , 0) + 1);
            hashSet.add(num);
        }
        for (Integer element : hashSet) {
            result[0] += hashMap.get(element) / 2;
            result[1] += hashMap.get(element) % 2;
        }
        return result;
    }
}
